package com.fengxu.gamescript.custom

import android.app.Activity
import android.view.MotionEvent
import android.view.View
import org.jetbrains.anko.sdk27.coroutines.onTouch

/**
 * 自定义事件类
 */
object CustomAction {

    // 移动事件触发的类型
    enum class MoveType{
        Left,
        Top,
        Right,
        Bottom
    }

    /**
     * 给指定控件添加触摸移动事件
     * @param view 指定的控件
     * @param limit 移动的限制距离
     * @param action 触发的事件
     */
    inline fun addMoveEvent(view: View, limit: Int, crossinline action: (MoveType)->Unit){
        var x1 = 0f
        var y1 = 0f
        var canDispatch = false
        view.onTouch { _, event ->
           if(event.action == MotionEvent.ACTION_DOWN){
               x1 = event.x
               y1 = event.y
               canDispatch = true
               return@onTouch
           }
            if(event.action == MotionEvent.ACTION_UP && canDispatch){
                val xDec = Math.abs(event.x - x1)
                val yDec = Math.abs(event.y - y1)
                if(xDec > yDec){
                    if(xDec < limit) return@onTouch
                    // 计算x方向
                    if(event.x > x1){
                        // 向右
                        action.invoke(MoveType.Right)
                    }else{
                        // 向左
                        action.invoke(MoveType.Left)
                    }
                    canDispatch = false
                }else{
                    if(yDec < limit) return@onTouch
                    // 计算y方向
                    if(event.y > y1){
                        // 向下
                        action.invoke(MoveType.Bottom)
                    }else{
                        // 相上
                        action.invoke(MoveType.Top)
                    }
                    canDispatch = false
                }
            }
        }
    }

}